package com.air.result;

import lombok.Data;

import java.io.Serializable;

/**
 * 统一返回结果的类，用于封装后端接口的返回数据。
 * 包含返回状态码、返回消息和返回数据三个基本字段。
 * @param <T> 返回数据的泛型类型。
 */
@Data
public class Result<T> implements Serializable {

    private Integer code; // 状态码，1表示成功，其他表示失败。
    private String msg; // 返回的消息，用于描述操作结果。
    private T data; // 返回的数据，泛型类型，可根据需要承载各种类型的数据。

    /**
     * 构造一个成功的结果对象。
     * @return 返回一个成功结果对象，其中code为1，msg为空。
     */
    public static <T> Result<T> success() {
        Result<T> result = new Result<T>();
        result.code = 1;
        return result;
    }

    /**
     * 构造一个成功的结果对象，并包含具体的数据。
     * @param object 成功操作返回的具体数据。
     * @return 返回一个成功结果对象，其中包含data字段。
     */
    public static <T> Result<T> success(T object) {
        Result<T> result = new Result<T>();
        result.data = object;
        result.code = 1;
        return result;
    }

    /**
     * 构造一个失败的结果对象。
     * @param msg 失败的具体原因描述。
     * @return 返回一个失败结果对象，其中code为0，msg为失败原因。
     */
    public static <T> Result<T> error(String msg) {
        Result<T> result = new Result<T>();
        result.msg = msg;
        result.code = 0;
        return result;
    }

}
